# 冒泡排序，但是也有很多值得思考的地方

# 冒泡排序你需要遍历几乎两遍，争着顺序的话遍历是当前到列表末尾，不太好弄，所以考虑从后向前好弄一些
def bubbleSort(alist):
    for passnum in range(len(alist)-1,0,-1):
        for i in range(passnum):
            if alist[i] > alist[i+1]:
                temp = alist[i]
                alist[i] = alist[i+1]
                alist[i+1] = temp

'''
    上述冒泡排序有个小问题就是可能就是不交换位置的时候我也接着进行遍历比较。
    实际上当passnum = len(alist) - 1 时，如果整个过程没有出现交换数据，那么说明0-最后的数字都是按照顺序的，那就不需要再排序了。
    同样的0-倒数第二个如果也不需要排序，那么剩下的也不需要比较排序了。这个叫做短冒泡排序
'''
def shortBubbleSort(alist):
    exchange = True
    passnum = len(alist) - 1
    while passnum > 0 and exchange:
        exchange = False
        for i in range(passnum):
            if alist[i] > alist[i+1]:
                temp = alist[i]
                alist[i] = alist[i+1]
                alist[i+1] = temp
                exchange = True
        passnum = passnum -1

if __name__ == '__main__':
    alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    shortBubbleSort(alist)
    print(alist)